package com.company.linkedList;

public class SwapNodes {
    public ListNode swapPairs(ListNode head) {
        if (head == null) {
            return null;
        }
        return doSwap(head);
    }

    private ListNode doSwap(ListNode head){
        ListNode preNode=null;

        ListNode frontNode=head;
        ListNode backNode=head.next;
        ListNode newHead=null;
        ListNode nextNode=backNode==null?null:backNode.next;
        newHead = head;
        while (frontNode!=null&&backNode!=null){
            //首先 记录下一个要操作的节点
            nextNode = backNode.next;
            //preNode 在上一步中进行记录 记录调换后的 nextNode 上一个节点
            frontNode.next = nextNode;
            backNode.next = frontNode;
            if (preNode != null) {
                preNode.next = backNode;
            }else {//prenode 如果为null 记录为newHead
                newHead = backNode;
            }
            preNode = frontNode;

            //步进到下一个迭代
            frontNode = nextNode;
            backNode = frontNode==null?null:frontNode.next;
        }
        return newHead;
    }
}
